/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ControleAcademico.View;

import ControleAcademico.Model.Dao.HistoricoDisciplinasImp;
import ControleAcademico.Model.Pojo.Aluno;
import ControleAcademico.Model.Pojo.Disciplina;
import ControleAcademico.Model.Pojo.HistoricoDisciplinas;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 *
 * @author arthur
 * @author renan
 * @author tais
 * @author vinicius
 */

public class MenuHistoricoDisciplinas {
     // Atributos
    private HistoricoDisciplinasImp historicoDisciplinasDao;
    
    // Metodos  
    public MenuHistoricoDisciplinas(){
        
    }
    
    public HistoricoDisciplinasImp getHistoricoDisciplinasDao() {
        return this.historicoDisciplinasDao;
    }
    
    
    public void criaListaVazia() {
        this.historicoDisciplinasDao = new HistoricoDisciplinasImp();
    }
    
    public void registrarHistoricoDisciplinas(MenuDisciplina menuDisciplina, MenuAluno menuAluno){
        
        // Obtendo o aluno
        System.out.println("Informe o ID do aluno:");
        
        for(Aluno d : menuAluno.getAlunoDao().obterLista()) {
            System.out.println(d.toString());
        }
        int alunoId = Console.readInteger();
        
        Aluno alunoEncontrado = null;
        try {
            alunoEncontrado = menuAluno.getAlunoDao().buscar(alunoId);
        } catch (IOException e) {
            System.out.println("Aluno não encontrado.");
            return;
        } 
        
        
        // Obtendo a disciplina
        System.out.println("Informe o ID da disciplina:");
        
        for(Disciplina d : menuDisciplina.getDisciplinaDao().obterLista()) {
            System.out.println(d.toString());
        }
        int disciplinaId = Console.readInteger();
        
        Disciplina disciplinaEncontrada = null;
        try {
            disciplinaEncontrada = menuDisciplina.getDisciplinaDao().buscar(disciplinaId);
        } catch (IOException e) {
            System.out.println("Disciplina não encontrada.");
            return;
        } 

        System.out.println("Informe o número de faltas: \n");
        int faltas = Console.readInteger();
        
        System.out.println("Informe o valor da nota final: \n");
        double nota = Console.readDouble();
               
        int id = this.historicoDisciplinasDao.obterLista().size() + 1;
        
        HistoricoDisciplinas historicoDisciplinas = new HistoricoDisciplinas(alunoEncontrado,disciplinaEncontrada,nota,id);
        
        
        try {
            this.historicoDisciplinasDao.adicionar(historicoDisciplinas);
        } catch (IOException ex) {
            System.out.println("Historico já cadastrado.");
        }
        
    }
    
        public void salvar() {
        
        try {
            File arquivo;  
  
            arquivo = new File("HistoricoDisciplinas.txt");  
            FileOutputStream fos = new FileOutputStream(arquivo);
            
            for (HistoricoDisciplinas h : getHistoricoDisciplinasDao().obterLista()) {
                String escrita = (h.getId() + "\t" + h.getMatriculado() 
                        + "\t" + h.getDisciplina().getId() + "\t"
                        + h.getNota() + "\t" + h.getNumeroFaltas() + "\n");
                fos.write(escrita.getBytes());
            }
            
            fos.close();  

        }catch (Exception ee) {  
            System.out.println(ee);
        }
    
    }
        
    public void load(MenuAluno menuAluno, MenuDisciplina menuDisciplina) {
        
        try {
            
            File entrada = new File("HistoricoDisciplinas.txt");
            InputStream leituraEntrada = new  FileInputStream(entrada);
            InputStreamReader leituraStream = new InputStreamReader(leituraEntrada);  
            BufferedReader leituraBuffer = new BufferedReader(leituraStream);

            String linha = leituraBuffer.readLine();
            this.criaListaVazia();
     
            while(linha!= null) {
                
                 String s[] = linha.split("\\t");
                 
                // Encontra o aluno
                Aluno aluno = null; 
                try {
                    aluno = menuAluno.getAlunoDao().buscar(Integer.parseInt(s[1]));
                 } catch (IOException e) {
                    System.out.println("Aluno não encontrado.");
                    return;
                 }        
                
                // Encontra a disciplina
                Disciplina disciplina = null; 
                try {
                    disciplina = menuDisciplina.getDisciplinaDao().buscar(Integer.parseInt(s[2]));
                 } catch (IOException e) {
                    System.out.println("Professor não encontrado.");
                    return;
                 }   
                
               
                HistoricoDisciplinas novoHistoricoDisciplinas = new HistoricoDisciplinas
                        (aluno,disciplina,Double.parseDouble(s[3]),Integer.parseInt(s[0]));
                
                this.getHistoricoDisciplinasDao().adicionar(novoHistoricoDisciplinas);
                linha = leituraBuffer.readLine();
            }


            leituraBuffer.close();
            leituraStream.close();
            leituraEntrada.close();
  
        }catch (Exception ee) {  
            System.out.println("Erro na leitura do arquivo.");
            ee.printStackTrace();  
        }
    }
    
}
